ourdataDas R-Paket ourdata ist im Rahmen der Vorlesungen in den Studiengängen Audiovisuelle Medien & Online Publishing und Game Design & Management entstanden. Es enthält einen Großteil der zu Übungszwecken verwendeten Datensätze, sowie einige selbst-programmierte Funktionen mit den sich diese Daten manipulieren bzw. Diagramme ausgeben lassen.
dataDas R-Paket ourdata enthält folgende Daten:
fragebogen
hdi
imr
kirche
koelsch
Mit der Funktion help() kannst Du Dir Hilfeseiten zu allen Datensätzen anzeigen lassen. Z.B. help(fragebogen) erklärt den Inhalt des Datenpaketes fragebogen.
functionsDas R-Paket ourdata enthält folgende Funktionen:
combine(x, y, ...)
ourdata()
plotter(...)
transformer(x, ...)
female zu 1, male zu 2 und ´diverszu3`.translate(x, target_lang)
Mit der Funktion help() kannst Du Dir Hilfeseiten zu allen Funktionen anzeigen lassen. Z.B. help(plotter) erklärt die Funktonsweise von der Funktion plotter().
5.Sem.In den Kursen GM_bac5 und AVM_bac5 im Fach Technical Applications & Data Analytics haben wir viele Themen der Datenanalyse betrachtet und uns einige technische Applikationen genauer angeschaut. Der Schwerpunkt lag auf R, einer Statistik-Programmiersprache, mit der übrigens auch dieses Dokument erstellt wurde.
Auf Ilias sind die Vorlesungsfolien sowie alle R-Skripte und sonstiges Material. Hier findest Du in ansprechender Weise aufbereitet Diagramme oder statistische Methoden und deren R-Code (dieser liegt zusätzlich auf Ilias im Ordner “Beispiel-Datensätze, Python und R-Skripte”). Der Code wartet darauf von Dir ausprobiert zu werden!
plotsIn R oder RStudio kann man verschiedene Diagramm-Typen zur Visualisation verwenden. Zur Hilfe dient die Funktion plottter() mit der man alle Diagramme (bis auf das Tortendiagramm) mit eigenen Daten ausführen kann.
Abb. 2.1a: Heatmap
Hier eine Auswahl der Diagramm-Typen, mit dem dazugehörigen Code:
Das Balkendiagramm veranschaulicht die Verbindung zwischen einer numerischen und einer kategorialen Variablen. Das Balkendiagramm stellt jede Kategorie als Balken dar und spiegelt den entsprechenden numerischen Wert mit der Größe des Balkens wider.
# Balkendiagramm erstellen
barplot(kirche$Austritte, kirche$Jahr, main = "Kichenaustritte", col.main = "white", col.lab = "white", yaxt = "n", ylab = "Austritte (per 1.000)", xlab = "Jahreszahlen", names = c("2017", "2018", "2019", "2020"))
# Beschriftung für x- und y-Achse verbessern und die Farbgebung für das Dark-Theme anpassen
axis(1, at = 1:4, lwd = 3, lwd.ticks = 3, col = "white", col.ticks = "white", col.lab = "white", col.axis = "white")
ypos <- seq(0, 600000, by = 100000)
axis(2, at = ypos, labels = sprintf("%1.0f", ypos), lwd = 0.5, lwd.ticks = 1, col = "white", col.ticks = "white", col.axis = "grey")Das Box-Diagramm zeigt die Verteilung einer numerischen Variablen basierend auf fünf zusammenfassenden Statistiken: - minimaler Nicht-Ausreißer - erstes Quartil - Median - drittes Quartil - Nicht-Ausreißer
Außerdem zeigen Boxplots die Positionierung von Ausreißern und ob die Daten verzerrt sind.
# Box-Diagramm erstellen
boxplot(koelsch$Koelsch, main = "Kölschkonsum", col.main = "white", col.lab = "white", yaxt = "n", ylab = "Kölschkonsum in Mil. Litern", xlab = "über den Zeitraum 2017 bis 2020", names = "2020")
# Beschriftung für die y-Achse verbessern und die Farbgebung für das Dark-Theme anpassen
ypos <- seq(160000000, 200000000, by = 10000000)
axis(2, at = ypos, labels = sprintf("%1.0fM.", ypos/1000000), lwd = 0.5, lwd.ticks = 1, col = "white", col.ticks = "white", col.axis = "grey")Das Dichtediagramm zeigt die Verteilung einer numerischen Variablen über ein kontinuierliches Intervall. Peaks eines Dichtediagramms visualisieren, wo sich die Werte numerischer Variablen konzentrieren.
# Dichtediagramm erstellen
plot(density(fragebogen$alter), main = "Verteilung des Alters im Kurs", col.main = "white", col.lab = "white", yaxt = "n", ylab = "Personen (Dichte)", xlab = "Alter (in Jahren)")
# Beschriftung für die y-Achse verbessern und die Farbgebung für das Dark-Theme anpassen
ypos <- c(0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06)
axis(2, at = ypos, labels = sprintf("%1.0fP", ypos*50), lwd = 0.5, lwd.ticks = 1, col = "white", col.ticks = "white", col.axis = "grey")Eine **Heatmap*-Diagramm visualisiert einzelne Werte einer Matrix mit Farben. Häufigere Werte werden typischerweise durch hellere rötliche Farben angezeigt und weniger häufige** Werte werden typischerweise durch dunklere Farben angezeigt.
data <- matrix(rnorm(81, 0, 9), nrow = 9, ncol = 9) # Beispiel Daten erstellen
colnames(data) <- paste0("Spalte ", 1:9) # Spaltennamen setzen
rownames(data) <- paste0("Zeile ", 1:9) # Zeilennamen setzen
# Heatmap erstellen
heatmap(data, main = "Heatmap", col.main = "white", col.lab = "white")Das Histogramm gruppiert kontinuierliche Daten in Bereiche und stellt diese Daten als Balken dar. Die Höhe jedes Balkens zeigt die Anzahl der Beobachtungen in jedem Bereich an.
# Histogramm erstellen
hist(fragebogen$kopf, main = "Kopfumfänge", col.main = "white", col.lab = "white", ylab = "Personen (Anzahl)", xlab = "Kopfumfang (in cm)")Das Liniendiagramm visualisiert Werte entlang einer Sequenz (z.B. über die Zeit). Liniendiagramme bestehen aus einer x-Achse und einer y-Achse. Die x-Achse zeigt normalerweise die Sequenz und die y-Achse die Werte an, die jedem Punkt der Sequenz entsprechen.
# Liniendiagramm erstellen
plot(fragebogen$note_mathe, type = "l", main = "Mathenoten", ylab = "Noten", xlab = "Person x", yaxt = "n", col.main = "white", col.lab = "white")
# Beschriftung für die y-Achse verbessern und die Farbgebung für das Dark-Theme anpassen
ypos <- c(2, 3, 4, 5)
axis(2, at = ypos, labels = sprintf("%1.0f", ypos), lwd = 0.5, lwd.ticks = 1, col = "white", col.ticks = "white", col.lab = "grey", col.axis = "white")Das Paar-Diagramm ist eine Diagrammmatrix, die aus Streudiagrammen für jede Variablenkombination eines Datenrahmens besteht.
# Paar-Diagramm erstellen
pairs(data.frame(fragebogen$interesse, fragebogen$note_annahme), main = "Zusammenhang Interesse und erwarteter Note", labels = c("Interesse", "erwartete Note"), col.main = "white", col.lab = "white")Ein QQplot (oder Quantil-Quantil-Diagramm), bestimmt ob zwei Datenquellen aus einer gemeinsamen Verteilung stammen. QQplots ziehen die Quantile der beiden numerischen Datenquellen gegeneinander. Wenn beide Datenquellen aus derselben Verteilung stammen, fallen die Punkte auf einen Winkel von 45°.
# Qqplot erstellen
qqplot(fragebogen$geschlecht, fragebogen$note_mathe, main = "Geschlecht und Mathenote", yaxt = "n", ylab = "Mathenote", xaxt = "n", xlab = "Geschlecht (1 'weiblich', 2 'männlich')", col.main = "white", col.lab = "white")
# Beschriftung für x- und y-Achse verbessern und die Farbgebung für das Dark-Theme anpassen
xpos <- c(1, 2)
axis(1, at = xpos, labels = sprintf("%1.0f", xpos), lwd = 0.5, lwd.ticks = 1, col = "white", col.ticks = "white", col.lab = "grey", col.axis = "white")
ypos <- c(2, 3, 4 , 5)
axis(2, at = ypos, labels = sprintf("%1.0f", ypos), lwd = 0.5, lwd.ticks = 1, col = "white", col.ticks = "white", col.lab = "grey", col.axis = "white")Das Streudiagramm zeigt zwei numerische Variablen mit Punkten an. Jeder Punkt zeigt den Wert einer Variablen auf der x-Achse und den Wert der anderen Variablen auf der y-Achse an.
# Daten zusammenfügen
df <- combine(imr$name, hdi$country, imr$value, hdi$hdi, col1 = "Land", col2 = "IMR", col3 = "HDI")'data.frame': 175 obs. of 3 variables:
$ Land: chr "Afghanistan" "Central African Republic" "Niger" "Chad" ...
$ IMR : num 106.8 84.2 68.1 67 65.3 ...
$ HDI : num 0.496 0.381 0.377 0.401 0.438 0.413 0.588 0.446 0.427 0.574 ...
# Streudiagramm erstellen
plot(df$HDI, df$IMR, main = "Einfluss des HDI auf IMR", ylab = "IMR", xlab = "HDI", col.main = "white", col.lab = "white")Kreis- oder Torten-Diagramm, sind zwar weit verbreitet, weisen jedoch einige Nachteile auf:
Aufgrund dieser Nachteile bietet sich die Verwendung von Kreisdiagramme nur in selten Fällen an, meist liefern Punkt- oder Balkendiagramme bessere Darstellungen.
# Beschriftung Gesamtzahl Jahr mit Prozentangabe erstellen
pie_labels <- paste0(kirche$Austritte, " (", round(100 * kirche$Austritte/sum(kirche$Austritte), 2), "%)")
# Kuchendiagramm erstellen
pie(kirche$Austritte, main = paste0("Kirchenaustritte pro Jahr (insg. ", sum(kirche$Austritte), ")"), labels = pie_labels, col = c("white", "lightblue", "mistyrose", "brown"))
# Legende erstellen
legend("topleft", legend = c("2017", "2018", "2019", "2020"), fill = c("white", "lightblue", "mistyrose", "brown"))Ein Venn-Diagramm (oder Primärdiagramm; Mengendiagramm; Logikdiagramm), veranschaulicht alle möglichen logischen Beziehungen zwischen bestimmten Datenmerkmalen. Jedes Merkmal wird als Kreis dargestellt, wobei überlappende Teile der Kreise Elemente darstellen, die beide Merkmale gleichzeitig aufweisen.
# Triple Venn Diagramm erstellen
draw.triple.venn(area1 = koelsch$Koelsch[4], area2 = kirche$Austritte[4], area3 = 1000000, n12 = 220000, n23 = 50000, n13 = 600000, n123 = 40000, main = "Kölsch -> Kirchenaustritt -> Köln?", fill = c("yellow", "brown", "blue"), category = c("Kölsch", "Kirche", "Köln"), main.col = "white", sub.col = "white", col = "white")data scienceDie Methoden des Data Mining lassen sich grundsätzlich in die Gruppen Klassifikation, Prognose, Segmentierung und Abhängigkeitsentdeckung einteilen. Dazu kommen Algorithmen zum Einsatz.
Ein Algorithmus ist eine formale Handlungsvorschrift zur Lösung von Instanzen einer bestimmten Problemklasse. 1
Abb. 2.2a: Gruppen des Data Mining
Hier findest Du die Data Mining Methoden aus den Vorlesungen, mit dem dazugehörigen Code:
Will man einen Zusammenhang zwischen zwei metrischen Variablen untersuchen, zum Beispiel zwischen dem Alter und dem Gewicht von Kindern, so berechnet man eine Korrelation. Diese besteht aus einem Korrelationskoeffizienten (rho bei Spearman) und einem p-Wert.
Der Korrelationskoeffizient gibt die Stärke und die Richtung des Zusammenhangs an. Er liegt zwischen -1 und 1. Ein Wert nahe -1 bezeichnet einen starken negativen Zusammenhang (z.B. „Mehr zurückgelegte Strecke mit dem Auto, weniger Treibstoff im Tank“). Ein Wert nahe 1 spricht für einen starken positiven Zusammenhang (z.B. „mehr Futter, dickere Kühe“). Kein Zusammenhang besteht, wenn der Wert nahe 0 liegt.
Der p-Wert sagt aus, ob es einen signifikanten Zusammenhang gibt. p-Werte kleiner als 0,05 werden als statistisch signifikant bezeichnet.
# Beide Listen mit 'SQL JOIN' kombinieren
imr_hdi <- sqldf('SELECT imr.name AS "country", imr.value As "imr", hdi.hdi AS "hdi" FROM imr INNER JOIN hdi ON imr.name = hdi.country ORDER BY imr.value DESC')
# Streudiagramm (Scatterplot)
plot(imr_hdi$imr ~ imr_hdi$hdi, main = "HDI IMR Korrelation", ylab = "Säuglingssterblichkeit (per 1.000)", xlab = "Human Development Index", xlim = range(0:1), ylim = range(1:110))# Quantifizierung der Zusammenhänge mittels Spearman Korrelation Funktion
cor.test(imr_hdi$imr, imr_hdi$hdi, method="spearman", exact=FALSE)
Spearman's rank correlation rho
data: imr_hdi$imr and imr_hdi$hdi
S = 1719986, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
-0.9256444
Lineare Regression ist eines der nützlichsten Werkzeuge in der Statistik. Regressionsanalyse erlaubt es Zusammenhänge zwischen Parametern zu schätzen und somit ein erklärendes Model für das Auftreten gewisser Phänomene zu geben. Wirkliche Kausalität wird durch statistische Analysen dieser Art zwar nicht aufgedeckt, die Ergebnisse aus solchen Analysen können aber Hinweise in diese Richtung geben. 2
# Mittels Funktion 'combine' aus dem R-Paket 'ourdata' einen vergleichbaren Datensatz erstellen mit IMR und HDI
df <- combine(imr$name, hdi$country, imr$value, hdi$hdi, col1 = "Land", col2 = "IMR", col3 = "HDI")
# Lineares Modell mit 'lm' erstellen
mdl <- lm(IMR ~ HDI, data=df)
# 'summary' Funktion
summary(mdl)
# Den p-Wert für 'HDI' errechnen
matCoef <- summary(mdl)$coefficients
pval <- matCoef["HDI", 4]
print(paste0("Der Effekt vom HDI auf IMR ist statistisch signifikant p = ", round(pval, 2), " (", pval, ")."))
# Diagramm erstellen
plot(df$HDI, df$IMR, xlab = "Prädiktor", ylab = "Ergebnis", col = "darkblue", pch = 16, main = "Lineare Regression")
# Regressionsgrade erstellen
abline(mdl, col = "darkred")'data.frame': 175 obs. of 3 variables:
$ Land: chr "Afghanistan" "Central African Republic" "Niger" "Chad" ...
$ IMR : num 106.8 84.2 68.1 67 65.3 ...
$ HDI : num 0.496 0.381 0.377 0.401 0.438 0.413 0.588 0.446 0.427 0.574 ...
Call:
lm(formula = IMR ~ HDI, data = df)
Residuals:
Min 1Q Median 3Q Max
-24.833 -4.900 0.041 5.132 59.646
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 103.266 3.467 29.78 <2e-16 ***
HDI -113.229 4.733 -23.92 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 9.45 on 173 degrees of freedom
Multiple R-squared: 0.7679, Adjusted R-squared: 0.7666
F-statistic: 572.4 on 1 and 173 DF, p-value: < 2.2e-16
[1] "Der Effekt vom HDI auf IMR ist statistisch signifikant p = 0 (9.3205327700806e-57)."
Die Basket Analyse kann zur Entdeckung von Assoziationen und Korrelationen zwischen Elementen in riesigen transaktionalen oder relationalen Datensätzen führen.
Das Aufsuchen von Verbindungen zwischen verschiedenen Artikeln, die Kunden in ihre „Warenkörbe“ legen ist ein häufiger Einsatz der Analyse. Das Wissen um diese Assoziationen kann für Einzelhändler oder Vermarkter hilfreich sein, um Marketingstrategien zu entwickeln. Das geschieht, indem sie Erkenntnisse darüber gewinnen, welche Artikel von Kunden häufig zusammen gekauft werden.
Wenn Kunden beispielsweise Milch kaufen, wie wahrscheinlich ist es, dass sie auf derselben Fahrt zum Supermarkt auch Brot (und welche Brotsorte) kaufen? Diese Informationen können zu einer Umsatzsteigerung führen, indem sie Einzelhändlern helfen, selektives Marketing zu betreiben und ihren Verkaufsraum zu planen.
# Bibliotheken laden
library(arules) # Paket mit Mining Datensätzen und Assoziationsregeln
library(datasets) # OpenIntro Datensätze
# Data frame laden
data(Groceries)
# Frequenz Diagramm für die Top 20 Artikel erstellen
itemFrequencyPlot(Groceries, topN = 20, type = "absolute", horiz = TRUE)# nach Milch suchen
itemFrequency(Groceries)[grep("milk", itemLabels(Groceries))] whole milk butter milk UHT-milk condensed milk
0.25551601 0.02796136 0.03345196 0.01026945
# Die Regeln ableiten
rules <- apriori(Groceries, parameter = list(supp = 0.001, conf = 0.8))Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen
0.8 0.1 1 none FALSE TRUE 5 0.001 1
maxlen target ext
10 rules TRUE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1 TRUE TRUE FALSE TRUE 2 TRUE
Absolute minimum support count: 9
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[169 item(s), 9835 transaction(s)] done [0.01s].
sorting and recoding items ... [157 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 5 6 done [0.02s].
writing ... [410 rule(s)] done [0.02s].
creating S4 object ... done [0.00s].
# Zeige die Top 5 Regeln (nur 2 Nachkommastellen)
options(digits=2)
inspect(rules[1:5]) lhs rhs support confidence coverage lift
[1] {liquor, red/blush wine} => {bottled beer} 0.0019 0.90 0.0021 11.2
[2] {curd, cereals} => {whole milk} 0.0010 0.91 0.0011 3.6
[3] {yogurt, cereals} => {whole milk} 0.0017 0.81 0.0021 3.2
[4] {butter, jam} => {whole milk} 0.0010 0.83 0.0012 3.3
[5] {soups, bottled beer} => {whole milk} 0.0011 0.92 0.0012 3.6
count
[1] 19
[2] 10
[3] 17
[4] 10
[5] 11
rules <- sort(rules, by="confidence", decreasing = TRUE)
rules <- apriori(Groceries, parameter = list(supp = 0.001, conf = 0.8, maxlen = 10))Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen
0.8 0.1 1 none FALSE TRUE 5 0.001 1
maxlen target ext
10 rules TRUE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1 TRUE TRUE FALSE TRUE 2 TRUE
Absolute minimum support count: 9
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[169 item(s), 9835 transaction(s)] done [0.01s].
sorting and recoding items ... [157 item(s)] done [0.00s].
creating transaction tree ... done [0.01s].
checking subsets of size 1 2 3 4 5 6 done [0.04s].
writing ... [410 rule(s)] done [0.02s].
creating S4 object ... done [0.00s].
# Paket mit Visualisations-Assoziationsregeln laden
library(arulesViz)
# Berechnungen der Matrix
subset.matrix <- is.subset(rules, rules)
subset.matrix[lower.tri(subset.matrix, diag = T)] <- NA
redundant <- colSums(subset.matrix, na.rm = T) >= 1
# Diagramm ausgeben
plot(rules, method = "graph", engine = "htmlwidget")K-Means ist ein Clustering-Verfahren, bei dem die Datensätze in eine Reihe von k Gruppen unterteilt werden, wobei k die vom Analysten vorgegebene Anzahl von Gruppen ist.
Die folgenden R-Codes zeigen, wie man die optimale Anzahl von Clustern bestimmt und wie man K-Means und PAM-Clustering in R berechnet.
Bestimmung der optimalen Anzahl von Clustern:
# Bibliotheken laden
library(cluster)
library(factoextra)
library(pheatmap)
# Datensatz von Verbrechern in den USA erstellen
mydata <- scale(USArrests)
# K-Means Clustering
fviz_nbclust(mydata, kmeans, method = "gap_stat")Abb. 2.2.4a: Optimal Number of Clusters
Berechnen und visualisieren des K-Means Cluster:
set.seed(123) # for reproducibility
km.res <- kmeans(mydata, 3, nstart = 25)
# Visualisieren
fviz_cluster(km.res, data = mydata, palette = "jco", ggtheme = theme_minimal(), barfill = "red", barcolor = "red", linecolor = "red")Abb. 2.2.4b: Cluster
Hierarchisches Clustering ist ein alternativer Ansatz zum partitionierenden Clustering, um Gruppen in einem Datensatz zu identifizieren. Bei diesem Verfahren muss die Anzahl der zu erzeugenden Cluster nicht im Voraus festgelegt werden.
Das Ergebnis des hierarchischen Clusterns ist eine baumartige Darstellung der Objekte, die auch als Dendrogramm bezeichnet wird. Die Beobachtungen können in Gruppen unterteilt werden, indem das Dendrogramm auf einem gewünschten Ähnlichkeitsniveau geschnitten wird:
# Hierarchisches Clustering
# Cluster Denrogramm
res.hc <- hclust(dist(mydata), method = "ward.D2")
fviz_dend(res.hc, cex = 0.5, k = 4, palette = "jco")Abb. 2.2.4c: Cluster Dendogramm
Eine Heatmap ist eine weitere Möglichkeit, hierarchisches Clustering zu visualisieren. Sie wird auch als Falschfarbenbild bezeichnet, bei dem die Datenwerte in eine Farbskala umgewandelt werden. Mit Heatmaps können wir gleichzeitig Gruppen von Proben und Merkmalen visualisieren:
# Heatmap erstellen
pheatmap(t(mydata), cutree_cols = 4)Abb. 2.2.4d: Cluster Heatmap
Ein neuronales Netz ist eine informationsverarbeitende Maschine und kann als Analogon zum menschlichen Nervensystem betrachtet werden. Genau wie das menschliche Nervensystem, das aus miteinander verbundenen Neuronen besteht, setzt sich ein neuronales Netz aus miteinander verbundenen informationsverarbeitenden Einheiten zusammen. Die informationsverarbeitenden Einheiten arbeiten nicht auf eine lineare Weise. Vielmehr bezieht das neuronale Netz seine Stärke aus der parallelen Verarbeitung von Informationen, die es ihm ermöglicht, mit Nichtlinearität umzugehen. Neuronale Netze sind nützlich, um aus komplexen Datensätzen eine Bedeutung abzuleiten und Muster zu erkennen.
Hier wird das neuronale Netz visualisiert. Unser Modell hat 3 Neuronen in seiner versteckten Schicht. Die schwarzen Linien zeigen die Verbindungen mit den Gewichten. Die Gewichte werden mit dem zuvor erläuterten Backpropagation-Algorithmus berechnet. Die gelben Linien stellen den Bias-Term dar:
# Bibliothek 'neuralnet' laden
library(neuralnet)
# Daten einlesen
data <- read.csv("cereals.csv", header=T)
print(data)
# Zufälliges Zusammenstellen
samplesize = 0.60 * nrow(data)
set.seed(80)
index <- sample( seq_len ( nrow ( data ) ), size = samplesize )
# Erstelle Trainings- und Testdaten-Set
datatrain <- data[ index, ]
datatest <- data[ -index, ]
# Daten für neurales Netzwerk skalieren
max <- apply(data , 2 , max)
min <- apply(data, 2 , min)
scaled <- as.data.frame(scale(data, center = min, scale = max - min))
## Neuronales Netz anpassen
# Erstelle Trainings- und Testdaten-Set
trainNN <- scaled[index , ]
testNN <- scaled[-index , ]
# Neuronales Netz anpassen
set.seed(2)
NN <- neuralnet(rating ~ calories + protein + fat + sodium + fiber, trainNN, hidden = 3 , linear.output = T )
# Diagramm erstellen
plot(NN)Abb. 2.2.5a: Neurales Netz
Hier wird die Bewertung des Modells mit Hilfe des neuronalen Netzmodells vorausgesagt. Die vorhergesagte Bewertung kann mit der realen Bewertung durch Visualisierung verglichen werden. Der RMSE für das neuronale Netzwerkmodell beträgt 6,05:
## Vorhersage mit Hilfe dnes neuronalen Netzes
predict_testNN <- compute(NN, testNN[,c(1:5)])
predict_testNN <- (predict_testNN$net.result * (max(data$rating) - min(data$rating))) + min(data$rating)
# Diagramm und Regressionsgrade erstellen
plot(datatest$rating, predict_testNN, col='blue', pch=16, ylab = "predicted rating NN", xlab = "real rating")
abline(0,1)Abb. 2.2.5b: Neurales Netz
miscHier findest Du Code-Beispiele, Lustiges und Neuigkeiten rund um das Thema technische Applikationen & Datenanalyse:
Dieses Beispiel zeigt die Verwendung von Schleifen in R. Schleifen kommen in der Programmierung häufig zum Einsatz, z.B. zum Überprüfen von Übereinstimmungen in zwei verschiedenen Datensätzen.
# Komplexere R Skript (Programmierung)
# Einfacher Vektor, die Funktion c kombiniert Werte in einen Vektor oder eine Liste
fruitVec <- c("Apfel", "Banane", "Orange", "Birne") # fruitVec wird mit 4 Werten (Strings) gefüllt
# Einfache While-Schleife
# Funktion length: gibt die Länge eines/r Vektors / Liste aus
# Der Vektor fruitVec kann wie ein Array angesprochen werden, um die einzelnen Werte auszulesen
pos <- 1
while (pos <= length(fruitVec)) {
print(paste0("Die Frucht Nr.", pos, " ist : ", fruitVec[pos]))
pos <- pos + 1
}[1] "Die Frucht Nr.1 ist : Apfel"
[1] "Die Frucht Nr.2 ist : Banane"
[1] "Die Frucht Nr.3 ist : Orange"
[1] "Die Frucht Nr.4 ist : Birne"
# Einfache For-Schleife
# Funktion paste0 verbindet Strings
# Funktion which ermittelt die Position eines Wertes im Vektor (bzw. Array)
help(which)
for (fruit in fruitVec) {
print(paste0("Die Frucht Nr.", which(fruit == fruitVec), " ist: ", fruit))
}[1] "Die Frucht Nr.1 ist: Apfel"
[1] "Die Frucht Nr.2 ist: Banane"
[1] "Die Frucht Nr.3 ist: Orange"
[1] "Die Frucht Nr.4 ist: Birne"
Dieser Code steht in der Datei example.R und wir von R-Markdown eingelesen und ausgeführt.
# x Werte von 1 und 100 zuweisen
x <- 1:100
# y 100 Werte zuweisen mit x + Zufallszahl (-5 bis +5)
y <- x + rnorm(100, sd = 5)
# Gibt den ersten oder letzten Teil eines Vektors, einer Matrix oder einer Tabelle zurück
head(data.frame(x, y))plot(x, y)Es gibt einen sehr interessanten Artikel auf https://trends.rbc.ru zum Thema *´Big Data. Nur leider in russischer Sprache :(…
Textauszug:
Что такое Big Data?
Big Data или большие данные — это структурированные или неструктурированные массивы данных большого объема. Их обрабатывают при помощи специальных автоматизированных инструментов, чтобы использовать для статистики, анализа, прогнозов и принятия решений.
Сам термин «большие данные» предложил редактор журнала Nature Клиффорд Линч в спецвыпуске 2008 года 1. Он говорил о взрывном росте объемов информации в мире. К большим данным Линч отнес любые массивы неоднородных данных более 150 Гб в сутки, однако единого критерия до сих пор не существует.
Hier wird gezeigt wie Python Code direkt ausgeführt werden kann:
# Python Bibliothek 'DeepL' laden
import deepl
# Übersetzung mit DeepL API (Python)
translator = deepl.Translator("c52a9c7d-3198-063c-2bbf-8f67173820ce:fx")
result = translator.translate_text("Что такое Big Data? Big Data или большие данные\n — это структурированные или неструктурированные массивы данных большого объема. \nИх обрабатывают при помощи специальных автоматизированных инструментов, \nчтобы использовать для статистики, анализа, \nпрогнозов и принятия решений. \nСам термин «большие данные» предложил редактор журнала Nature \nКлиффорд Линч в спецвыпуске 2008 года. \nОн говорил о взрывном росте объемов информации в мире. \nК большим данным Линч отнес любые массивы неоднородных данных более 150 Гб в сутки, \nоднако единого критерия до сих пор не существует.", target_lang="DE")
# Übersetzung ausgeben
print(result)Was ist Big Data? Große Daten oder große Daten
- sind strukturierte oder unstrukturierte Datensätze mit großen Datenmengen.
Sie werden mit speziellen automatisierten Werkzeugen bearbeitet,
die für Statistiken und Analysen verwendet werden sollen,
Prognosen und Entscheidungsfindung.
Der Begriff "Big Data" selbst wurde von der Nature-Redaktion geprägt
Clifford Lynch in einer Sonderausgabe 2008.
Er sprach von der explosionsartigen Zunahme von Daten in der Welt.
Lynch definiert Big Data als jede Menge heterogener Daten, die größer als 150 GB pro Tag ist,
aber es gibt noch kein einziges Kriterium.
Dieser Artikel kann hier vollständig gelesen werden ;)
Textauszug (Fortsetzung):
ЧДо 2011 года анализом больших данных занимались только в рамках научных и статистических исследований. Но к началу 2012-го объемы данных выросли до огромных масштабов, и возникла потребность в их систематизации и практическом применении.
С 2014 на Big Data обратили внимание ведущие мировые вузы, где обучают прикладным инженерным и ИТ-специальностям. Затем к сбору и анализу подключились ИТ-корпорации — такие, как Microsoft, IBM, Oracle, EMC, а затем и Google, Apple, Facebook и Amazon. Сегодня большие данные используют крупные компании во всех отраслях, а также — госорганы. Подробнее об этом — в материале Кто и зачем собирает большие данные?
Hier wird gezeigt wie eine Python Funktion aus R ausgeführt werden kann:
# R lädt mit 'reticulate::source_python' die Python Datei 'py_deepl.py'
source_python(system.file("extdata", "py_deepl.py", package = "ourdata", mustWork = FALSE))
# Ausführen der Python Funktion 'py_deepl'
py_deepl("ЧДо 2011 года анализом больших данных занимались только в рамках научных и статистических исследований. \nНо к началу 2012-го объемы данных выросли до огромных масштабов, \nи возникла потребность в их систематизации и практическом применении. \nС 2014 на Big Data обратили внимание ведущие мировые вузы, \nгде обучают прикладным инженерным и ИТ-специальностям. \nЗатем к сбору и анализу подключились ИТ-корпорации — такие, как Microsoft, \nIBM, Oracle, EMC, а затем и Google, Apple, Facebook и Amazon. \nСегодня большие данные используют крупные компании во всех отраслях, а также — госорганы. \nПодробнее об этом — в материале Кто и зачем собирает большие данные?", "DE")Bis 2011 wurden Big Data nur im Rahmen der wissenschaftlichen und statistischen Forschung analysiert.
Doch Anfang 2012 hatte das Datenvolumen bereits enorme Ausmaße angenommen,
und es entstand die Notwendigkeit, sie zu systematisieren und praktisch anzuwenden.
Im Jahr 2014 haben sich die führenden Universitäten der Welt mit Big Data beschäftigt,
wo angewandte Ingenieur- und IT-Berufe gelehrt werden.
Dann werden IT-Konzerne - wie Microsoft,
IBM, Oracle, EMC, und später Google, Apple, Facebook und Amazon.
Big Data wird heute von großen Unternehmen in allen Branchen sowie von Regierungsbehörden genutzt.
Weitere Informationen finden Sie unter Wer sammelt Big Data und warum?
Dies ist der Übersetzungs-Code der DeepL API in R geschrieben:
## inst/extdata/translate.R
## Function 'translate' for translating text using DeepL (www.deepl.com)
# Funktionsname und Parameter
translate <- function(text = NULL,
target_lang = "EN"
)
{
# Variable 'responses' leeren
responses <- NULL
# Leerzeichen mit '%20' füllen
text <- stringr::str_replace(gsub("\\s+", "%20", stringr::str_trim(text)), "B", "b")
# URL der Deepl API
url <- "https://api-free.deepl.com/v2/translate?"
# Auth Key
auth_key <- "c52a9c7d-3198-063c-2bbf-8f67173820ce:fx"
# URL mit Parametern zusammensetzen
urlx <- paste0(url,
"auth_key=", auth_key,
"&text=", text,
"&target_lang=", target_lang
)
# Daten des Deepl Servers erhalten
response <- httr::GET(urlx)
# Daten formatieren
respcontent <- httr::content(response, as = "text", encoding = "UTF-8")
# Daten im JSON-Format einlesen und in ein R-Objekt überführen
result <- jsonlite::fromJSON(respcontent)$translations$text
responses <- c(responses, result)
# Rückgabe des Wertes an R / RStudio
return(responses)
}Dies ist der Übersetzungs-Code der DeepL API in Python geschrieben:
## inst/extdata/py_deepl.py
## python script for using DeepL API for translating
# Python Bibliothek 'DeepL' laden
import deepl
def py_deepl(x, lang):
# Übersetzung mit DeepL API (Python)
translator = deepl.Translator("c52a9c7d-3198-063c-2bbf-8f67173820ce:fx")
result = translator.translate_text(x, target_lang = lang)
# Rückgabe der Daten
return result1000 Wissenschaftler haben ganz unabhängig voneinander (unter der Einhaltung aller wissenschaftlichen Voraussetzungen) herausgefunden:
Abb. 2.3.7a: Katzen-Statistik
Ein spannender Artikel der die Jobs im Big Data Bereich auflistet und mögliche Gehälter (in Dollar) auflistet:
Seit meiner Kindheit spiele ich Computer-Spiele allen Genres. Insbesondere Adventure Games, wie die Klassiker Indiana Jones, Monkey Island und der moderne Ableger Baphomets Fluch bzw. Broken Sword, haben mich immer wieder vor den Bildschirm gelockt. So lag es nicht fern, mal ein eigenes Adventure Game zu kreieren.
Hier meine BenBox.org Webseite für meinen iPad Spiele-Prototypen, den ich während meines Studiums an der Hochschule Fresenius im Studiengang Gesundheit & Management (B. Sc.) erstellt habe:
lit.Copyright © 2021 All rights reserved.